package thread;

/**
 * 多线程
 * 线程：程序中一个单一的顺序执行流程就是一个线程（线程的执行流程，代码顺序执行）
 * 多线程：多个线程并发执行
 *
 * 创建线程的第一种方式：
 * 自己定义一个类继承Thread并重写run方法
 */
public class ThreadDemo1 {
    public static void main(String[] args) {
        Thread t1 = new thread1();
        Thread t2 = new thread2();
        /*
            该方法用来启动线程,不能直接调用线程的run方法
            当调用线程的start方法后，线程就调入到线程调动器中，被统一调动管理，
            该线程第一次分配时间后，会自动调用run方法
         */
        t1.start();
        t2.start();
        //这结果就不是按顺序输出了，是CPU自己分配线程,t1,t2的run同时输出
    }
}
/**
 * 第一种创建线程方式的优缺点
 * 优点:
 *  结构简单，便于匿名内部类形式创建
 * 缺点:
 *  1:存在继承冲突问题
 *    java是单继承，当一个类需要设计为线程，并且同时需要复用另一个类中的方法时，就存在了
 *    需要同时继承两个类的情况，而这是java不允许的。
 *
 *  2:线程任务与线程存在了耦合关系，不利于线程的复用
 *    当我们设计一个线程时，直接重写run方法，将线程任务定义在线程中，导致线程只会干run方法
 *    中的操作，那么这样是不利于线程的重复使用的。
 */
class thread1 extends Thread{//注意这不是内部类
    public void run(){
        for(int i=0; i<1000; i++){
            System.out.println("你是谁啊");
        }
    }
}

class thread2 extends Thread{
    public void run(){
        for(int i=0; i<1000; i++){
            System.out.println("我是查水表的");
        }
    }
}